import request from '@/config/axios'

// 申请状态 -1:草稿， 0:未申请 1:已申请，待审核 2:审核未通过 3:申请成功 4:已落选 5:已获奖 6:取消资格 7:差额评选中
export type ApplyStatus = -1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7
// 审核流程状态 0=审核中 1=通过 2=不通过 3=撤回 4=取消资格
export type ProcessStatus = 0 | 1 | 2 | 3 | 4

// 奖项信息 VO
export interface AwardVO {
  instanceId: string // 评奖ID
  awardsName: string // 奖项标题
  awardsType: number // 奖项类型
  year: string // 年度
  status: ApplyStatus // 申请状态
  applyStartTime: number // 在线申请开始时间
  applyEndTime: number // 在线申请结束时间
  noticeUrl: string // 通知公告地址
  candidateId: string // 候选人ID
  processInstanceId: string // 流程实例ID
  processStatus?: ProcessStatus // 流程状态
  cancelReason: string // 取消资格原因
}

// 奖项申请DTO
export interface AwardApplyDTO {
  selfIntroduction: string // 自我介绍
  attachment: string // 申请附件
  instanceId: string // 评奖id
  paperIds: string[] // 论文id
  patentIds: string[] // 专利id
}

// 答辩时间安排
export interface DefenseTimeInfo {
  breakTime: number // 休息时间
  debateInterval: number // 间隔
  debateStartTime: number // 答辩开始时间
  finalDate: number // 终评日期
}

// 候选人扩展信息
export interface CandidateExtendInfoVO {
  id: number // id
  accountId: string // 账号id
  selfIntroduction: string // 自我介绍
}

// 学生端查看答辩时间VO
export interface AppCandidateDebateTimeVO {
  initialTime: Date
  finalTime: Date
}

// 学生评奖 API
export const AwardApplicationApi = {
  // 查询奖项分页
  getAwardPage: async (params: any) => {
    return await request.get({ url: `/awards/instance/student-page`, params })
  },

  // 查询奖项答辩时间安排
  getAwardDefenceTime: async (candidateId: string) => {
    return await request.get({ url: `/awards/instance/debate-time?candidateId=` + candidateId })
  },

  // 暂存
  saveDraft: async (data: AwardApplyDTO) => {
    return await request.post({ url: `/awards/instance/saveDraft`, data })
  },

  // 奖项申请
  applyAward: async (data: AwardApplyDTO) => {
    return await request.post({ url: `/awards/instance/apply`, data })
  },

  // 申请详情
  getAwardApplyDetail: async (instanceId: string) => {
    return await request.get({ url: `/awards/candidate/get?id=` + instanceId })
  },

  // 查询候选人扩展信息
  getCandidateExtendInfo: async () => {
    return await request.get<CandidateExtendInfoVO>({ url: `/awards/candidate/extend-info` })
  },

  // 撤销申请
  revokeApply: async (id: string, reason: string) => {
    return await request.delete({
      url: `/bpm/process-vo/cancel-by-start-user`,
      data: { id, reason }
    })
  }
}
